package jp.co.dailyReport.weeklyReport.action;

import java.io.IOException;
import java.util.Calendar;
import java.util.Vector;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.DynaActionForm;
import jp.co.dailyReport.DataUnavailableException;
import jp.co.dailyReport.SystemCalendar;
import jp.co.dailyReport.project.Project;
import jp.co.dailyReport.project.ProjectManager;
import jp.co.dailyReport.staff.Staff;
import jp.co.dailyReport.PermissionManager;

/**
 * ﾒﾆｭｰページの週報リンクが押されたときの処理を管理するクラスです。
 */
public class WeeklyReportConditionAction extends Action {

	private static Logger log = Logger.getLogger(WeeklyReportConditionAction.class);

	/**
	 * ﾒﾆｭｰページの週報リンクが押されたときの処理を実行します。<BR>
	 * DynaActionFormオブジェクトの作業期間フィールドに、先週の日付を設定します。<BR>
	 * プロジェクト情報を取得します。
	 * 
	 * @param mapping このインスタンスを選択するために使用したActionMapping
	 * @param form 存在するならば、このリクエストのためのActionForm Bean
	 * @param request 処理しているHTTPリクエスト
	 * @param response 処理しているHTTPレスポンス
	 * @return ActionForwardインスタンス
	 * @throws IOException, ServletException
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

		log.debug("WeeklyReportConditionAction start");
		HttpSession session = request.getSession();
		log.debug("session.getId() = " + session.getId());
		Staff staff = (Staff)session.getAttribute("LoginStaff");
		DynaActionForm doWeeklyReportActionForm = (DynaActionForm)form;
		Calendar cal = Calendar.getInstance();

		doWeeklyReportActionForm.set("workDateStartY", new Integer(cal.get(Calendar.YEAR)));
		doWeeklyReportActionForm.set("workDateStartM", new Integer(cal.get(Calendar.MONTH)+1));
		doWeeklyReportActionForm.set("workDateStartD", new Integer(cal.get(Calendar.DATE)));
		doWeeklyReportActionForm.set("workDateStartW", new Integer(cal.get(Calendar.WEEK_OF_MONTH)-1));

		Vector projectList = new Vector();
		try {
			Project[] projects = ProjectManager.load(staff,PermissionManager.WEEKLYREPORT_REGISTRATION,PermissionManager.METHOD_READ);
			for(int i=0;i<projects.length;i++) {
				//プロジェクトの終了ﾁｪｯｸ
				if(!ProjectManager.load(projects[i].getProjectId()).isStatusFlg()){
					projectList.add(projects[i]);
				}
			}
		} catch(DataUnavailableException due) {
			log.error(due.getMessage());
		}

		request.setAttribute("projectList", projectList);
		request.setAttribute("systemCalendar", new SystemCalendar());
		log.debug("WeeklyReportConditionAction end");
		return mapping.findForward("add");
	}
}
